package kuber

import (
	"common_demo/internal/config"
	"fmt"

	"k8s.io/client-go/kubernetes"
	"k8s.io/client-go/rest"
	"k8s.io/client-go/tools/clientcmd"
	"k8s.io/klog"
)

func NewKuberClient(conf *config.KuberConfig) (clientSet *kubernetes.Clientset, err error) {
	var restConfig *rest.Config

	if conf == nil {
		return nil, fmt.Errorf("[NewKuberClient]: invalid config")
	}

	if restConfig, err = clientcmd.BuildConfigFromFlags(
		"",                         // master url
		config.Config.Kuber.Config, // config
	); err != nil {
		klog.Fatal(err)
		return
	}

	if clientSet, err = kubernetes.NewForConfig(restConfig); err != nil {
		klog.Fatal(err)
		return
	}

	// test
	// ctx := context.Background()
	// fmt.Println("Namespaces: ")
	// namespaceList, err := clientSet.CoreV1().Namespaces().List(ctx, v1.ListOptions{})
	// if err != nil {
	// 	panic(err)
	// }
	// namespaces := namespaceList.Items
	// for _, namespace := range namespaces {
	// 	fmt.Printf("- %s (%s)\n", namespace.Name, string(namespace.Status.Phase))
	// }

	return
}
